import Cookie from 'js-cookie'
import { removeAuthorization } from './request'
// import vue from 'vue'
// 401拦截
const resp401 = {
  /**
   * 响应数据之前做点什么
   * @param response 响应对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {*}
   */
  onFulfilled(response, options) {
    const { message } = options
    if (response.status === 401) {
      message.error('无此接口权限')
    }
    return response
  },
  /**
   * 响应出错时执行
   * @param error 错误对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {Promise<never>}
   */
  onRejected(error, options) {
    const { message } = options
    message.error('出错了哦,请联系技术~')
    return Promise.reject(error)
  }
}

const resp403 = {
  onFulfilled(response, options) {
    const { message } = options
    if (response.status === 403) {
      message.error(`请求被拒绝`)
    }
    return response
  }
}
const resp20002 = {
  onFulfilled(response, options) {
    const { message } = options
    // if()
    // console.log(response, 111);
    // console.log(response.data.code, 222);
    // console.log(response.config, 333);
    // 业务错误
    if (response.data.code !== 20000) {
      // 登录失效
      if (response.data.code === 20002) {
        message.error(response.data.message || '登录失效~')
        // 清除凭证
        removeAuthorization("Bearer")
        // 跳转到登录页面
        window.location.href = '/#/login'
        return response
      }
      // 其他业务错误
      message.warning(response.data.message || '未知错误，请重试~')
      return response

    }
    return response
  }
}

const reqCommon = {
  /**
   * 发送请求之前做些什么
   * @param config axios config
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {*}
   */
  onFulfilled(config, options) {
    const { message } = options
    const { url, xsrfCookieName } = config
    if (url.indexOf('login') === -1 && xsrfCookieName && !Cookie.get(xsrfCookieName)) {
      message.warning('认证 token 已过期，请重新登录')
      Cookie.remove("Authorization")
    }
    return config
  },
  /**
   * 请求出错时做点什么
   * @param error 错误对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {Promise<never>}
   */
  onRejected(error, options) {
    const { message } = options
    message.error(error.message)
    return Promise.reject(error)
  }
}

export default {
  request: [reqCommon], // 请求拦截
  response: [resp401, resp403, resp20002] // 响应拦截
}
